home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
The World of Computer Software.iso
/
erasedir.zip
/
ERASEDIR.C
next >
Wrap
C/C++ Source or Header
|
1992-04-05
|
12KB
|
406 lines
/*****
*****/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dos.h>
#include <dir.h>
#include <conio.h>
char cmp_path_1[MAXDIR], cmp_path_2[MAXDIR];
char last_path[MAXDIR], save_working_directory[MAXDIR];
char dir_to_erase[50][MAXDIR], current_drive[4], drive_letter;
char current_directory[MAXDIR];
char root_directory[MAXDIR], delyn;
char next_root[MAXDIR], delete_directory[MAXDIR], parm_switch;
char save_path[MAXPATH], save_drive[MAXDRIVE], save_directory[MAXDIR];
char save_file_name[MAXFILE], save_ext[MAXEXT];
int n, num_dir, new_drive, save_working_drive;
int done, i, j, p, b, c, found, rc, switch_c, switch_d;
struct ffblk r ;
int sort_dir(void);
int change_file_attribute(char *file_name, int new_attr);
int main(int argc, char *argv[])
{
clrscr(); /* start program */
printf("\n\n ERASEDIR Ver 1.00 \n");
save_working_drive = getdisk();
getcwd(save_working_directory, MAXDIR);
if (argc < 2) {
printf("*ERROR* No directory specified.\n");
printf(" Please re-enter command with correct DRIVE and PATH !");
printf("\nP R O G R A M T E R M I N A T E D !\n");
exit(1);
}
strcpy(delete_directory, argv[1]);
strupr(delete_directory);
fnsplit(delete_directory, save_drive, save_directory, save_file_name, save_ext);
if ((strcmp(save_directory, "\\") == 0) &&
(save_file_name[0] == NULL)) {
printf("*ERROR* You can not specify the ROOT DIRECTORY.\n");
printf("\nP R O G R A M T E R M I N A T E D !\n");
exit(1);
}
drive_letter = save_drive[0];
new_drive = drive_letter-'A';
if (!setdisk(new_drive)) {
printf("*ERROR* Drive %s does not exist.\n", save_drive);
printf(" Please re-enter command with correct DRIVE and PATH !");
printf("\nP R O G R A M T E R M I N A T E D !\n");
exit(1);
}
if (chdir(delete_directory)) {
printf("*ERROR* Directory %s was not found.\n", delete_directory);
printf(" Please re-enter command with correct directory name.\n");
printf("\nP R O G R A M T E R M I N A T E D !\n");
exit(1);
}
switch_c = 0;
switch_d = 0;
if (argc > 2) {
strupr(argv[2]);
parm_switch = argv[2][1];
switch(parm_switch) {
case 'C':
switch_c++;
printf(" CLEAR switch was set ... Directories will be cleared.\n");
break;
case 'D':
switch_d++;
printf(" DELETE switch was set ... Directories will be deleted.\n");
break;
default:
switch_c++;
printf("*WARNING* Unknown switch... Directories will be cleared.\n");
break;
}
}
else {
switch_c++;
printf(" Default switch taken... Directories will be cleared.\n");
}
sprintf(root_directory, "%s%s", save_drive, save_directory);
getcwd(current_directory, MAXDIR);
if (switch_c) {
printf("\n %s and all sub-directories will be cleared.\n", delete_directory);
printf(" Is this correct (Y)/N ? ");
}
else {
printf("\n %s and all sub-directories will be deleted.\n", delete_directory);
printf(" Is this correct (Y)/N ? ");
}
if (toupper(getch()) == 'N') {
printf("\n Please re-enter command with correct parameters.\n");
printf("\nP R O G R A M T E R M I N A T E D !\n");
exit(1);
}
printf("\n");
j=1;
i=1;
done = findfirst("*.*", &r, FA_DIREC);
sprintf(dir_to_erase[0], "%s", current_directory);
for(;;) {
while(done) {
if(dir_to_erase[j][0] == NULL) {
num_dir=i;
n=i;
sort_dir();
printf("\nDirectories found are:\n");
for(i=0; i<num_dir; i++) {
printf(" %s \n", dir_to_erase[i]);
}
printf("Number of directories found: %d \n\n", num_dir);
for(i=num_dir-1, j=num_dir; j>0; i--) {
if (chdir(dir_to_erase[i])) {
printf("*ERROR* Program did not switch to directory %s.\n", dir_to_erase[i]);
perror("Reason");
printf("\nP R O G R A M T E R M I N A T E D !\n");
exit(1);
}
if (switch_d) {
if (j != num_dir) {
if (rmdir(dir_to_erase[i+1])) {
printf("*ERROR* Directory %s was not removed.\n", dir_to_erase[i+1]);
perror("Reason");
}
else {
printf(" Directory %s removed.\n", dir_to_erase[i+1]);
}
}
}
j--;
/* do hidden files */
done = findfirst("*.*", &r, FA_HIDDEN);
for(; !done; ) {
if ((r.ff_attrib != FA_DIREC) &&
(r.ff_name[0] != '.') &&
(r.ff_attrib != FA_LABEL)) {
change_file_attribute(r.ff_name, 0);
if (remove(r.ff_name)) {
printf("*ERROR* File %s\\%s was not be deleted.\n", dir_to_erase[i], r.ff_name);
perror("Reason");
}
else {
printf(" File %s\\%s deleted.\n", dir_to_erase[i], r.ff_name);
}
}
done = findnext(&r);
}
/* do read-only files */
done = findfirst("*.*", &r, FA_RDONLY);
for(; !done; ) {
if ((r.ff_attrib != FA_DIREC) &&
(r.ff_name[0] != '.') &&
(r.ff_attrib != FA_LABEL)) {
change_file_attribute(r.ff_name, 0);
if (remove(r.ff_name)) {
printf("*ERROR* File %s\\%s was not be deleted.\n", dir_to_erase[i], r.ff_name);
perror(" Reason");
}
else {
printf(" File %s\\%s deleted.\n", dir_to_erase[i], r.ff_name);
}
}
done = findnext(&r);
}
/* do system files */
done = findfirst("*.*", &r, FA_SYSTEM);
for(; !done; ) {
if ((r.ff_attrib != FA_DIREC) &&
(r.ff_name[0] != '.') &&
(r.ff_attrib != FA_LABEL)) {
printf("*WARNING* File %s\\%s is a SYSTEM FILE.\n", dir_to_erase[i], r.ff_name);
printf(" Delete anyway Y/(N)? ");
delyn = getch();
printf("\n");
if (toupper(delyn) != 'Y') {
printf(" File %s\\%s will not be deleted.\n", dir_to_erase[i], r.ff_name);
}
else {
change_file_attribute(r.ff_name, 0);
if (remove(r.ff_name)) {
printf("*ERROR* File %s\\%s was not be deleted.\n", dir_to_erase[i], r.ff_name);
perror(" Reason");
}
else {
printf(" File %s\\%s deleted.\n", dir_to_erase[i], r.ff_name);
}
}
}
done = findnext(&r);
}
/* do normal files */
done = findfirst("*.*", &r, 0);
for(; !done; ) {
if ((r.ff_attrib != FA_DIREC) &&
(r.ff_name[0] != '.') &&
(r.ff_attrib != FA_LABEL)) {
if (remove(r.ff_name)) {
printf("*ERROR* File %s\\%s was not be deleted.\n", dir_to_erase[i], r.ff_name);
perror(" Reason");
}
else {
printf(" File %s\\%s deleted.\n", dir_to_erase[i], r.ff_name);
}
}
done = findnext(&r);
}
/* do hidden+read-only files */
done = findfirst("*.*", &r, FA_HIDDEN+FA_RDONLY);
for(; !done; ) {
if ((r.ff_attrib != FA_DIREC) &&
(r.ff_name[0] != '.') &&
(r.ff_attrib != FA_LABEL)) {
change_file_attribute(r.ff_name, 0);
if (remove(r.ff_name)) {
printf("*ERROR* File %s\\%s was not be deleted !\n", dir_to_erase[i], r.ff_name);
perror(" Reason");
}
else {
printf(" File %s\\%s deleted.\n", dir_to_erase[i], r.ff_name);
}
}
done = findnext(&r);
}
/* do system+hidden files */
done = findfirst("*.*", &r, FA_SYSTEM+FA_HIDDEN);
for(; !done; ) {
if ((r.ff_attrib != FA_DIREC) &&
(r.ff_name[0] != '.') &&
(r.ff_attrib != FA_LABEL)) {
printf("*WARNING* File %s\\%s is a SYSTEM FILE !\n", dir_to_erase[i], r.ff_name);
printf(" Delete anyway Y/(N)? ");
delyn = getch();
printf("\n");
if (toupper(delyn) != 'Y') {
printf(" File %s\\%s will not be deleted.\n", dir_to_erase[i], r.ff_name);
}
else {
change_file_attribute(r.ff_name, 0);
if (remove(r.ff_name)) {
printf("*ERROR* File %s\\%s was not be deleted.\n", dir_to_erase[i], r.ff_name);
perror(" Reason");
}
else {
printf(" File %s\\%s deleted.\n", dir_to_erase[i], r.ff_name);
}
}
}
done = findnext(&r);
}
/* do system+read-only files */
done = findfirst("*.*", &r, FA_SYSTEM+FA_RDONLY);
for(; !done; ) {
if ((r.ff_attrib != FA_DIREC) &&
(r.ff_name[0] != '.') &&
(r.ff_attrib != FA_LABEL)) {
printf("*WARNING* File %s\\%s is a SYSTEM FILE !\n", dir_to_erase[i], r.ff_name);
printf(" Delete anyway Y/(N)? ");
delyn = getch();
printf("\n");
if (toupper(delyn) != 'Y') {
printf(" File %s\\%s will not be deleted.\n", dir_to_erase[i], r.ff_name);
}
else {
change_file_attribute(r.ff_name, 0);
if (remove(r.ff_name)) {
printf("*ERROR* File %s\\%s was not be deleted.\n", dir_to_erase[i], r.ff_name);
perror(" Reason");
}
else {
printf(" File %s\\%s deleted.\n", dir_to_erase[i], r.ff_name);
}
}
}
done = findnext(&r);
}
/* do system+hidden+read-only files */
done = findfirst("*.*", &r, FA_SYSTEM+FA_HIDDEN+FA_RDONLY);
for(; !done; ) {
if ((r.ff_attrib != FA_DIREC) &&
(r.ff_name[0] != '.') &&
(r.ff_attrib != FA_LABEL)) {
printf("*WARNING* File %s\\%s is a SYSTEM FILE !\n", dir_to_erase[i], r.ff_name);
printf(" Delete anyway Y/(N)? ");
delyn = getch();
printf("\n");
if (toupper(delyn) != 'Y') {
printf("File %s\\%s will not be deleted !\n", dir_to_erase[i], r.ff_name);
}
else {
change_file_attribute(r.ff_name, 0);
if (remove(r.ff_name)) {
printf("*ERROR* File %s\\%s was not be deleted.\n", dir_to_erase[i], r.ff_name);
perror(" Reason");
}
else {
printf(" File %s\\%s deleted.\n", dir_to_erase[i], r.ff_name);
}
}
}
done = findnext(&r);
}
}
if (switch_d) {
if (chdir(root_directory)) {
printf("*ERROR* Program did not switch to root directory %s.\n", dir_to_erase[i]);
perror("Reason");
printf("\nP R O G R A M T E R M I N A T E D !\n");
exit(1);
}
if (rmdir(dir_to_erase[0])) {
printf("*ERROR* Directory %s was not removed.\n", dir_to_erase[0]);
perror("Reason");
}
else {
printf(" Directory %s removed.\n", dir_to_erase[0]);
}
}
setdisk(save_working_drive);
chdir(save_working_directory);
printf("\n ERASEDIR completed OK - and with a CRLF.. AMY. \n");
printf(" Written by James G. Hawkins with saftey in mind.\n");
return(0);
}
chdir(dir_to_erase[j]);
getcwd(next_root, MAXDIR);
sprintf(current_directory, "%s", next_root);
done = findfirst("*.*", &r, FA_DIREC);
j++;
}
if((r.ff_attrib == FA_DIREC) &&
(r.ff_name[0] != '.')) {
sprintf(last_path, "%s\\%s", current_directory, r.ff_name);
sprintf(dir_to_erase[i], "%s\\%s", current_directory, r.ff_name);
i++;
}
done = findnext(&r);
}
}
int sort_dir()
{
found=0;
i=0;
j=1;
c=(n*n)-1;
n--;
for(b=0; b<c; b++) {
strcpy(cmp_path_1, dir_to_erase[i]);
strcpy(cmp_path_2, dir_to_erase[j]);
if(strcmp(cmp_path_1, cmp_path_2) > 0) {
strcpy(dir_to_erase[i], cmp_path_2);
strcpy(dir_to_erase[j], cmp_path_1);
found = 1;
}
i++;
j++;
if(j>n) {
if(!found) {
return(0);
}
i=0;
j=1;
found=0;
}
}
return(0);
}
int change_file_attribute(char *file_name, int new_attr)
{
int f;
union REGS ireg;
ireg.h.ah = 0x43;
ireg.h.al = 1;
ireg.x.dx = (unsigned) file_name;
ireg.x.cx = new_attr;
intdos(&ireg, &ireg);
if (ireg.x.cflag) {
perror("*Error* File attribute was not changed");
printf("\n");
return(1);
}
return(ireg.x.ax);
}